package com.atguigu.spring5.service;

import com.atguigu.spring5.dao.RoleDao;
import com.atguigu.spring5.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

//在注解里面value属性值可以省略不写
//默认值是类名称，首字母小写
//UserService -- userService
//@Component(value = "userService")   //<bean id="userService" class="...">
@Service
public class UserService {

    //定义dao类型属性
    //不需要添加set方法
    //添加注入属性的注解即可
    @Autowired
    @Qualifier(value = "userDaoImpl1")
    private UserDao userDao;


//    @Resource //根据类型进行注入
//    private RoleDao roleDao;

    @Resource(name = "roleDaoImpl")
    private RoleDao roleDao;


    @Value(value = "abc")
    private String name;

    /**
     * @Autowired 根据属性类型进行自动装配
     * 第一步 把service和dao对象创建，在service和dao类添加创建对象注解
     * 第二步 在service注入dao对象,在service类添加dao类型属性，在属性上面使用注解
     * @Qualifier 根据属性名称进行注入
     * 这个@Qualifier注解的使用，和上面@Autowired组合使用
     * 因为接口可以有多个实现，多个实现如果只按类型注入，会找不到到底注入哪一个实现类
     * @Resource 可以根据类型注入，可以根据名称注入
     * 不是Spring包内的注解，而是javax扩展包内的功能
     * @Value 注入普通类型属性
     * <p>
     * <p>
     * 完全注解开发
     */


    public void add() {
        System.out.println("service add.......");
        userDao.add();
        roleDao.add();
        System.out.println(name);
    }

}
